/**
 * Copyright (C) 2009 aileron.cc
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package cc.aileron.wsgi.extension;

import java.util.EnumMap;

import cc.aileron.template.TemplateModules;

import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Stage;

/**
 * @author Aileron
 */
public class TemplateProcessModule implements Module
{
    @Override
    public void configure(final Binder binder)
    {
        binder.install(templateModules);
        binder.bind(TemplateProcessProvider.class)
            .to(map.get(binder.currentStage()))
            .asEagerSingleton();
    }

    /**
     * constractor
     */
    public TemplateProcessModule()
    {
        templateModules = new TemplateModules();
        map = new EnumMap<Stage, Class<? extends TemplateProcessProvider>>(
                Stage.class);
        map.put(Stage.DEVELOPMENT,
                TemplateProcessProviderDevelopment.class);
        map.put(Stage.PRODUCTION,
                TemplateProcessProviderProduction.class);
    }

    /**
     * templateModules
     */
    private final TemplateModules templateModules;

    private final EnumMap<Stage, Class<? extends TemplateProcessProvider>> map;
}
